const error = (message) => {
    return "<div class='invalid-feedback'>"+message+"</div>"
}
const removeClass = (that) => {
    $(that).nextAll("div").remove()
    $(that).removeClass("is-invalid")
    $(that).removeClass("is-valid")
}
function validateUsername(input) {
    removeClass(input)
    const value = input.value.replace(/(^\s*)|(\s*$)/g, '');//去除空格;
    const reg = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/
    if(value === '' || value === undefined || value === null){
        $(input).addClass("is-invalid")
        $(input).after(error("用户名不能为空"))
        return false
    }
    if(value.length<4 || value.length>20){
        $(input).addClass("is-invalid")
        $(input).after(error("用户名长度在4-20之间"))
        return false
    }
    if(!reg.test(value)){
        $(input).addClass("is-invalid")
        $(input).after(error("用户名只能包含汉字、字母，数字和下划线"))
        return false
    }
    $(input).addClass("is-valid")
    return true
}

function validateEmail(input) {
    removeClass(input)
    const value = input.value.replace(/(^\s*)|(\s*$)/g, '');//去除空格;
    const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
    if(value === '' || value === undefined || value === null){
        $(input).addClass("is-invalid")
        $(input).after(error("邮箱不能为空"))
        return false
    }
    if(!reg.test(value)){
        $(input).addClass("is-invalid")
        $(input).after(error("邮箱格式有误"))
        return false
    }
    $(input).addClass("is-valid")
    return true
}

function validatePassword(input) {
    removeClass(input)
    let value = $(input).val()
    if(value === '' || value === undefined || value === null){
        $(input).addClass("is-invalid")
        $(input).after(error("密码不能为空"))
        return false
    }
    value = value.replace(/(^\s*)|(\s*$)/g, '') //去除空格;
    const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}$/
    if(value.length<6 || value.length>20){
        $(input).addClass("is-invalid")
        $(input).after(error("密码长度在6-20之间"))
        return false
    }
    if(!reg.test(value)){
        $(input).addClass("is-invalid")
        $(input).after(error("必须包含大小写字母和数字的组合"))
        return false
    }
    $(input).addClass("is-valid")
    return true
}

function validateConfirmPassword(input) {
    removeClass(input)
    let passwordId = "#"+$(input).attr("rel") || "password"
    if(validatePassword($(passwordId))){
        if($(input).val() !== $(passwordId).val()){
            $(input).addClass("is-invalid")
            $(input).after(error("两次密码不一致"))
            return false
        }
        $(input).addClass("is-valid")
        return true
    }
}

function validate(form) {
    const forms = $(form).find('input')
    const validated = Array.prototype.slice.call(forms).map((input,index)=>{
        const name = $(input).attr("name")
        switch (name) {
            case 'username': validateUsername(input);break
            case 'password': validatePassword(input);break
            case 'email': validateEmail(input);break
            case 'confirmPassword': validateConfirmPassword(input);break
        }
        return input
    }).every((input)=>{
        return !$(input).hasClass("is-invalid")
    })
    if(validated){
        console.log("校验通过")
    }else{
        console.log("表单校验失败")
    }
    return validated
}
